package pers.xiqingbo.web;

import com.google.gson.Gson;
import pers.xiqingbo.pojo.Book;
import pers.xiqingbo.pojo.Cart;
import pers.xiqingbo.pojo.CartGoods;
import pers.xiqingbo.service.BookService;
import pers.xiqingbo.service.impl.BookServiceImpl;
import pers.xiqingbo.utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @PackageName: ${PACKAGE_NAME}
 * @ClassName: ${NAME}
 * @Description: 购物车表示层
 * @Author: Schieber
 * @Date: 2021/3/1 下午 14:51
 */
public class CartServlet extends BaseServlet {

    BookService bookService = new BookServiceImpl();

    /**
     * 使用ajax技术添加商品至购物车
     *
     * @param request  请求
     * @param response 响应
     * @throws ServletException
     * @throws IOException
     */
    protected void ajaxAddCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求添加至购物车的图书id
        Integer pageBookId = WebUtils.parseInt(request.getParameter("pageBookId"), 0);
        // 调用图书service通过id查询图书信息
        Book book = bookService.queryBookById(pageBookId);
        // 将查询到的图书信息转换为商品对象
        CartGoods cartGoods = new CartGoods(book.getId(), book.getName(), 1, book.getPrice(), book.getPrice());
        // 添加该商品对象至购物车中
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            request.getSession().setAttribute("cart", cart);
        }
        cart.addGoods(cartGoods);
        // 将刚添加至购物车的商品名称保存在Session域中
        request.getSession().setAttribute("lastGoods", cartGoods.getName());
        // 重定向回添加商品页面（来源页）
        // request.getHeader("Referer")：获取到请求头中的"Referer"来源参照页

        // 将返回的结果封装成Map对象
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("totalCount", cart.getTotalCount());
        resultMap.put("lastGoods", cartGoods.getName());

        // 调用toJson()将字符串转换为Json格式
        Gson gson = new Gson();
        String jsonData = gson.toJson(resultMap);

        // 将Json格式的数据传回客户端
        response.getWriter().write(jsonData);
    }

    /**
     * 删除购物车中的商品
     *
     * @param request  请求
     * @param response 响应
     * @throws ServletException
     * @throws IOException
     */
    protected void deleteCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求删除购物车商品的id
        Integer deleteGoodsId = WebUtils.parseInt(request.getParameter("deleteGoodsId"), 0);

        // 获取到Session中存储的cart对象
        Cart cart = (Cart) request.getSession().getAttribute("cart");

        // 传入需要删除的商品id并调用删除商品的方法
        if (cart != null) {
            cart.deleteGoods(deleteGoodsId);
        }
        // 重定向回购物车页面（来源页）
        // request.getHeader("Referer")：获取到请求头中的"Referer"来源参照页
        response.sendRedirect(request.getHeader("Referer"));
    }

    /**
     * 清空购物车中的所有商品
     *
     * @param request  请求
     * @param response 响应
     * @throws ServletException
     * @throws IOException
     */
    protected void clearCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获取到Session中存储的cart对象
        Cart cart = (Cart) request.getSession().getAttribute("cart");

        // 调用清空购物车的方法
        if (cart != null) {
            cart.clearCart();
        }
        // 重定向回购物车页面（来源页）
        // request.getHeader("Referer")：获取到请求头中的"Referer"来源参照页
        response.sendRedirect(request.getHeader("Referer"));
    }

    /**
     * 修改购物车中商品数量
     *
     * @param request  请求
     * @param response 响应
     * @throws ServletException
     * @throws IOException
     */
    protected void updateCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求修改商品数量的商品id
        int goodsId = WebUtils.parseInt(request.getParameter("goodsId"), 0);
        // 获取请求修改的商品数量
        int goodsCount = WebUtils.parseInt(request.getParameter("goodsCount"), 1);

        // 获取到Session中存储的cart对象
        Cart cart = (Cart) request.getSession().getAttribute("cart");

        // 调用修改购物车商品数量的方法
        if (cart != null) {
            cart.updateGoods(goodsId, goodsCount);
        }
        // 重定向回购物车页面（来源页）
        // request.getHeader("Referer")：获取到请求头中的"Referer"来源参照页
        response.sendRedirect(request.getHeader("Referer"));
    }

    /*    // 添加商品至购物车
    protected void addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求添加至购物车的图书id
        Integer pageBookId = WebUtils.parseInt(request.getParameter("pageBookId"), 0);
        // 调用图书service通过id查询图书信息
        Book book = bookService.queryBookById(pageBookId);
        // 将查询到的图书信息转换为商品对象
        CartGoods cartGoods = new CartGoods(book.getId(), book.getName(), 1, book.getPrice(), book.getPrice());
        // 添加该商品对象至购物车中
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            request.getSession().setAttribute("cart", cart);
        }
        cart.addGoods(cartGoods);
        // 将刚添加至购物车的商品名称保存在Session域中
        request.getSession().setAttribute("lastGoods", cartGoods.getName());
        // 重定向回添加商品页面（来源页）
        // request.getHeader("Referer")：获取到请求头中的"Referer"来源参照页
        response.sendRedirect(request.getHeader("Referer"));
    }*/
}
